(function () {
  // 谁都可以修改 数据 不安全
  // 给属性加修饰符 可控制访问权
  // public 最宽松的 在哪儿都可以访问
  // private  私有的  只能在自己的类中访问   （想访问 在类中提供读取和修改的方法。（主动权在我））
  // protected  受保护的 可以在自己类中和其子类中访问
  // 最后有一个语法糖  定义类的语法糖

  class Person {
    private _name: string;
    _age: number;
    // 设置属性
    constructor(name: string, age: number) {
      this._name = name;
      this._age = age;
    }
    // 修改  读取 私有属性的方法 暴露一个方法
    // setName(value:string) {
    // 判断
    //     if(value>0){
    //         this._name = value;
    //     }
    // //
    // }
    // getName(){
    //    return this._name
    // }
    // Ts提供了另一种方法 来读取 和修改
    get name() {
      return this._name;
    }
    set name(value: string) {
      this._name = value;
    }
    get age() {
      return this._age;
    }
    set age(value: number) {
      if (value > 0) {
        this._age = value;
      }
    }
  }
  const per = new Person("孙悟空", 18);
  //    per._name='猪八戒'
  //   per.setName("猪八戒");
  //   console.log(per.getName());
  per.name = "zhubajie";
  per.age = 10;
  console.log(per);

  class A {
    protected num = 10;
  }
  class B extends A {
    getNum() {
      console.log(this.num);
    }
  }
  const a1=new A()
//   console.log(a1.num);
  
  const B1 = new B();
  B1.getNum();


//   类的属性 简写 直接写在 构造函数中 省去了this.  赋值 过程
// 要加public
class D {

    constructor( public name:string, public age:number) {
        
    }
}
const D1 =new D('cheng',18) 
console.log(D1);

})();
